package com.shanxia.im.sdk.client;

import com.shanxia.codec.ProtocolDataBase;
import com.shanxia.im.sdk.client.model.Message;

/**
 * CIM 主要事件接口
 */
public interface CIMEventListener {

	/**
	 * 当收到服务端推送过来的消息时调用
	 * 
	 * @param message
	 */
	void onMessageReceived(Message message);

	/**
	 * 当调用CIMPushManager.sendRequest()向服务端发送请求，获得相应时调用
	 * 
	 * @param protocolDataBase
	 */
	void onReplyReceived(ProtocolDataBase protocolDataBase);

	/**
	 * 当调用CIMPushManager.sendRequest()向服务端发送请求成功
	 * @param protocolDataBase
	 */
	void onSendFinished(ProtocolDataBase protocolDataBase);

	/**
	 * 当连接服务器成功时回调
	 * 
	 * @param hasAutoBind
	 *            : true 已经自动绑定账号到服务器了，不需要再手动调用bindAccount
	 */
	void onConnectFinished(boolean hasAutoBind);

	/**
	 * 当断开服务器连接的时候回调
	 */
	void onConnectionClosed();

	/**
	 * 当服务器连接失败的时候回调
	 * 
	 */
	void onConnectFailed();

	/**
	 * 监听器在容器里面的排序。值越大则越先接收
	 * @return 值越大优先级越高
	 */
	int getEventDispatchOrder();
}
